package Chuong07;

import java.io.*;

public class Bai04 {

	ObjectOutputStream write;
	ObjectInputStream read;
	SinhVien[] SV;
	BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
	String filename = "D:/Hoc Tap/Hoc Ki VII/Chuyen De Java/OnTap_Code/OnTap/src/Chuong07/File/DanhSach.dat";
	//String filename = "Z:/DanhSach.dat";
	public Bai04(){
		
		try {
			System.out.print("\nQUẢN LÝ SINH VIÊN\nMenu:\n1.Nhập\n2.Xuất\n3.Tìm kiếm\n0.Thoát\nMời bạn chọn: ");
			int chon = Integer.parseInt(in.readLine());
			
			switch (chon) {
			case 0:
				SV = ReadFileSV();
				Luu(SV);				
				break;
			case 1:
				int nSL;		
				System.out.print("Số lưọng sinh viên: ");
				nSL = Integer.parseInt(in.readLine());
				Set_Write_SV(SV, nSL);	
				new Bai04();
				break;
			case 2:
				System.out.print("\nDanh sách sinh viên:\n");
				Read_In_SV();
				new Bai04();
				break;
			case 3:
				TimKiem();
				new Bai04();
				break;
			default:
				break;
			}
			
			
			
			
		} catch (NumberFormatException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public void Set_Write_SV(SinhVien[] SV, int nSL){
		SV = new SinhVien[nSL];
		try {
			write = new ObjectOutputStream(new FileOutputStream(filename));
			for(int i = 0; i < nSL; i++){	
				System.out.println("Sinh viên thứ " + (i+1) + ":");				
				SV[i] = new SinhVien();
				SV[i].SetSV(in);
				write.writeObject(SV[i]);
			}
		} catch (FileNotFoundException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		try{
			write.close();
		}catch (IOException e) { 
			e.printStackTrace();
		}
	}
	
	public void Luu(SinhVien[] SV){
		try {
			write = new ObjectOutputStream(new FileOutputStream(filename));
			for(int i = 0; i < SV.length; i++){	
				write.writeObject(SV[i]);
			}
		} catch (FileNotFoundException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		try{
			write.close();
		}catch (IOException e) { 
			e.printStackTrace();
		}
	}
	
	public int getSL(){
		int sl = 0;
		try {
			read = new ObjectInputStream(new FileInputStream(filename));
			SinhVien r = new SinhVien();
			try {
				boolean c = true;
				while(c){
					try{
						r = (SinhVien)read.readObject();
						sl++;
					}catch (Exception e) {
						c = false;
					}
				}
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();sl--;
			}
			
		} catch (FileNotFoundException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		
		try{
			read.close();
		}catch (IOException e) { 
			e.printStackTrace();
		}
		
		return sl;
	}
	
	public void Read_In_SV(){
		SV = ReadFileSV();
		for(int i = 0; i < SV.length; i++){
			System.out.print("\nSinh viên thứ " + (i+1) + ":");
			System.out.println(SV[i].GetSV());
		}
	}
	
	public SinhVien[] ReadFileSV(){
		int n = getSL();
		SinhVien[] a = new SinhVien[n];		
		try {
			read = new ObjectInputStream(new FileInputStream(filename));			
			try {
				for(int i = 0; i < n; i++){
					a[i] = (SinhVien)(read.readObject());
				}
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		try{
			read.close();
		}catch (IOException e) { 
			e.printStackTrace();
		}
		
		return a;		
	}
	
	public void Tim(int chon){
		try{
			SinhVien[] ds = ReadFileSV();
			System.out.print("Nhập thông tin cần tìm: ");
			String sr;
			switch (chon) {
			case 1:
				sr = in.readLine();
				for(int i = 0; i < ds.length; i++){
					if(ds[i].MSSV.compareTo(sr)==0){
						System.out.print("Đã tìm thấy!\n");
						System.out.print(ds[i].GetSV());
						System.out.print("\nBạn có muốn thay đổi thông tin không?(1. Có/2. Không)\n");
						int y = Integer.parseInt(in.readLine());
						if(y == 1){
							System.out.print("\nNhập thông tin cần thay đổi: ");
							ds[i].SetSV(in);
							Luu(ds);
							System.out.print("\nThay đổi thành công!");
						}
					}
					else{
						if(i == ds.length){								
							System.out.print("\nKhông tìm thấy!");
						}
					}
				}
				break;
			case 2:
				sr = in.readLine();
				for(int i = 0; i < ds.length; i++){
					if(ds[i].hoTen.compareTo(sr)==0){
						System.out.print("Đã tìm thấy!\n");
						System.out.print(ds[i].GetSV());
						System.out.print("\nBạn có muốn thay đổi thông tin không?(1. Có/2. Không)\n");
						int y = Integer.parseInt(in.readLine());
						if(y == 1){
							System.out.print("\nNhập thông tin cần thay đổi: ");
							ds[i].SetSV(in);
							Luu(ds);
							System.out.print("\nThay đổi thành công!");
						}
					}
					else{
						if(i == ds.length){								
							System.out.print("\nKhông tìm thấy!");
						}
					}
				}
				break;
			case 3:
				float d = Float.parseFloat(in.readLine());
				for(int i = 0; i < ds.length; i++){
					if(ds[i].DTBC==d){
						System.out.print("Đã tìm thấy!\n");
						System.out.print(ds[i].GetSV());
						System.out.print("Bạn có muốn thay đổi thông tin không?(1. Có/2. Không)\n");
						int y = Integer.parseInt(in.readLine());
						if(y == 1){
							System.out.print("Nhập thông tin cần thay đổi: ");
							ds[i].SetSV(in);
							Luu(ds);
							System.out.print("Thay đổi thành công!");
						}
					}
					else{
						if(i == ds.length){								
							System.out.print("\nKhông tìm thấy!");
						}
					}
				}
				break;
	
			default:
				break;
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public void TimKiem(){		
		
		try {
			boolean t = true;
			while(t){
				System.out.print("\nBạn muốn tìm:\n1.MSSV\n2.Họ tên\n3.DTBC\nMời bạn chọn:");
				int chon = Integer.parseInt(in.readLine());
				Tim(chon);
				System.out.print("\nTiếp tục tìm:\n1.Có\n2.Thoát");
				int tt = Integer.parseInt(in.readLine());
				if(tt == 1) t = true;
				else t = false;
			}
			//Lưu
		} catch (NumberFormatException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) {
		new Bai04();
	}

}
